package de.dhbw.tit07.progress.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import de.dhbw.tit07.progress.model.ProgressListener;
import de.dhbw.tit07.progress.types.Percent;
public class Visualization implements ProgressListener {
private static final int PREFERRED_WIDTH = 600;
private final JFrame frame;
private final JProgressBar progress;
public Visualization() {
super();
this.frame = new JFrame("We are making progress here"); //$NON-NLS-1$
this.progress = new JProgressBar(0, PREFERRED_WIDTH);
}
private void buildUI() {
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
this.progress.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 13));
this.progress.setPreferredSize(new Dimension(PREFERRED_WIDTH, this.progress.getPreferredSize().height));
content.add(this.progress, BorderLayout.CENTER);
this.frame.setContentPane(content);
}
public void show() {
buildUI();
this.frame.pack();
this.frame.setLocationRelativeTo(null);
this.frame.setVisible(true);
}
protected JFrame getFrame() {
return this.frame;
}
protected JProgressBar getProgress() {
return this.progress;
}
@Override
public void finished() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
getFrame().setVisible(false);
}
});
}
@Override
public void progressing(final Percent percentage) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
getProgress().setValue((int) (percentage.getValue() * getExpansionFactor()));
}
});
}
protected double getExpansionFactor() {
return (PREFERRED_WIDTH / 100.0d);
}
}